﻿    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using codeding.KMeans.DataStructures.Lists;
//using Microsoft.Office.Interop.Excel;
using System.Data.SqlClient;
using System.Data;

namespace codeding.KMeans.DataStructures
{
    public class BuildMatrixUsersItemsBase
    {
        public int _SoHang;
        public int _SoCot;
        public double [,] _MaTran;
        private DanhMucRatings _DmRatings = null;

        //public BuildMatrixUsersItemsBase()
        //{
        //    try
        //    {
        //        _DmRatings = DanhMucRatings.Instance;

        //        _SoHang = DanhMucUserAccount.GetMaxID() + 1;
        //        _SoCot = DanhMucMovie.GetMaxID() + 1;

        //        InitMatran(_SoHang, _SoCot);
        //        FillDataMaTran();

        //        //Xuất file
        //        RWFile.ExportToTextFile(_MaTran, _SoHang, _SoCot, "MatrixUsersItems");
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception(ex.Message);
        //    }
        //    finally
        //    {
        //    }
        //}
        public BuildMatrixUsersItemsBase(bool readFromFile)
        {
            try
            {
                _DmRatings = DanhMucRatings.Instance;

                _SoHang = DanhMucUserAccount.GetMaxID() + 1;
                _SoCot = DanhMucMovie.GetMaxID() + 1;

                //
                //if (!readFromFile)
                //{
                    InitMatran(_SoHang, _SoCot);
                    FillDataMaTran();

                    //Xuất file
                    RWFile.ExportToTextFile(_MaTran, _SoHang, _SoCot, "MatrixUsersItems");
                //}
                //else
                //    _MaTran = RWFile.ReadFromTextFile("MatrixUsersItems");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
            }
        }

        //Khởi tạo ma trận với số hàng = số user, số cột = số phim trong danh mục. Các phần tử trong ma trận = 0;
        private void InitMatran(int soHang, int soCot)
        {
            this._SoHang = soHang;
            this._SoCot = soCot;
            this._MaTran = new double[_SoHang, _SoCot];

            for (int i = 0; i < _SoHang; i++)
            {
                for (int j = 0; j < _SoCot; j++)
                {
                    _MaTran[i,j] = 0;
                }
            }
        }

        //ĐIền thông tin rating tương ứng từ bảng tblRating vào ma trận. Không có rating thì vẫn giữ giá trị 0
        private void FillDataMaTran()
        {
            foreach (Ratings rating in _DmRatings)
            {
                _MaTran[rating.UserID, rating.MovieID] = rating.Rating;
            }
        }
    }
}
